package com.sicheng.蓝桥.练习题;

import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/5/31 10:14
 */
@SuppressWarnings("all")
public class 整数划分 {
    /**
     * 一个正整数 n 可以表示成若干个正整数之和，形如：n=n1+n2+…+nk，其中 n1≥n2≥…≥nk,k≥1。
     * <p>
     * 我们将这样的一种表示称为正整数 n 的一种划分。
     * <p>
     * 现在给定一个正整数 n，请你求出 n 共有多少种不同的划分方法。
     * <p>
     * 输入格式
     * 共一行，包含一个整数 n。
     * <p>
     * 输出格式
     * 共一行，包含一个整数，表示总划分数量。
     * <p>
     * 由于答案可能很大，输出结果请对 109+7 取模。
     * <p>
     * 数据范围
     * 1≤n≤1000
     * 输入样例:
     * 5
     * 输出样例：
     * 7
     */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        long mod = (long) (1e9 + 7);
        long[] dp = new long[n + 1];
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = i; j <= n; j++) {
                dp[j] = (dp[j] + dp[j - i]) % mod;
            }
        }

        System.out.println(dp[n]);
    }
}
